#include<bits/stdc++.h>
using namespace std;
const int NN=1004,P=1e9+7;
int f[NN][1<<5][1<<5];
int qmi(int a,int b)
{
	int res=1;
	while(b)
	{
		if(b&1)
			res=1ll*res*a%P;
		a=1ll*a*a%P;
		b>>=1;
	}
	return res;
}
int calc(int x,int w)
{
	int t=1ll*qmi(2,(x-1)/2)*(qmi(2,(x-1)/2)-1+P)%P;
	if(x%2)
		t=1ll*t*qmi(2,P-2)%P;
	else if(w==1)
		t=qmi(2,x-2);
	return t;
}
int main()
{
	freopen("pearl.in","r",stdin);
	freopen("pearl.out","w",stdout);
	int n,m,x,y=0;
	scanf("%d%d%d",&n,&m,&x);
	if(n<=1000)
	{
		for(int i=0;i<m;i++)
		{
			int t;
			scanf("%1d",&t);
			y+=t*(1<<i);
		}
		f[1][0][y]=1;
		for(int i=1;i<=n;i++)
			for(int j=0;j<1<<m;j++)
				for(int k=0;k<1<<m;k++)
					for(int l=0;l<1<<m;l++)
						f[i+1][j^((l*k)&((1<<m)-1))][l]=(f[i+1][j^((l*k)&((1<<m)-1))][l]+f[i][j][k])%P;
		int ans=0;
		for(int i=0;i<1<<m;i++)
			for(int j=0;j<1<<m;j++)
			{
				int s1=0,s2=0;
				for(int k=0;k<1<<m;k++)
				{
					s1=(s1+f[x][i][k])%P;
					s2=(s2+f[n-x+1][j][k])%P;
				}
				ans=(ans+1ll*(i^j)*s1%P*s2%P)%P;
			}
		printf("%d\n",ans);
	}
	else
	{
		int t;
		scanf("%d",&t);
		int a=calc(x,t),b=calc(n-x+1,t);
		printf("%lld\n",(1ll*(qmi(2,x-1)-a+P)%P*b%P+1ll*a*(qmi(2,n-x)-b+P)%P)%P);
	}
	return 0;
}
